home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Collections: Franz PD
/
Franz PD Disk #334 (1994-06)(Rhein-Sieg-Soft).zip
/
Franz PD Disk #334 (1994-06)(Rhein-Sieg-Soft).adf
/
ASo-Tools
/
Sources
/
MakeDir.asm
< prev
next >
Wrap
Assembly Source File
|
1994-04-03
|
4KB
|
137 lines
;mit DOBJ gewonnenes Listing von 'MakeDir'
;anschließend per Hand optimiert und so verändert, daß neue Directorys
; gleich als nicht ausführbar markiert werden.
NOLIST
INCLUDE "exec/LVO.i"
INCLUDE "exec/execbase.i"
INCLUDE "dos/LVO.i"
INCLUDE "dos/dos.i"
INCLUDE "dos/dosextens.i"
LIST
_DirName: EQU -24 ;Zeiger auf das aktuelle zu erzeugende Directory.
;Offset zu A5
_ExecBase: EQU 36 ;Zeiger auf die Basis der exec.library. Offset zu sp
_DOSBase: EQUR A3
DirLock: EQUR D5 ;BPTR auf das alte/neue Directory
IOError: EQUR D6 ;der erhaltene IO-Fehler
RetCode: EQUR D7 ;der beabsichtigte Return-Code
SECTION only,CODE
main: LINK.W A5,#-36
MOVEM.L D2-D3/D5-D7/A2-A3/A6,-(sp)
MOVEA.W #_AbsExecBase,A0
MOVEA.L (A0),A6
MOVEQ.L #RETURN_FAIL,RetCode ;Vorgabe für den Return-Wert
MOVEQ.L #0,IOError
MOVE.L A6,_ExecBase(sp)
LEA.L dosname(pc),A1
MOVEQ.L #36,D0
CALL OpenLibrary
move.l D0,_DOSBase
tst.l D0
beq nodos
LEA.L pattern(pc),A0
MOVE.L A0,D1
LEA.L -28(A5),A1
MOVE.L A1,D2
MOVEQ.L #0,D3
move.l d3,(a1)
CALLDOS ReadArgs
MOVE.L D0,32(sp)
TST.L D0
bne 2$
CALL IOErr
MOVE.L D0,D1
MOVE.L D3,D2
CALL PrintFault
bra abort
2$: MOVEQ.L #0,IOError
MOVEA.L -28(A5),A2
MOVE.L A2,D1
bne 3$
MOVEQ.L #RETURN_FAIL,RetCode
MOVE.L D3,D2
LEA.L nonameerr(pc),A1
MOVE.L A1,D1
CALL VPrintf
bra .l3
3$: MOVEQ.L #RETURN_OK,RetCode
MOVE.L (A2),_DirName(A5)
bra .l4
.l5: MOVE.L _DirName(A5),D1
MOVEQ.L #ACCESS_READ,D2
CALLDOS Lock
MOVE.L D0,DirLock
beq 1$
MOVEQ.L #RETURN_ERROR,RetCode
MOVEQ.L #0,IOError
LEA.L twiceerr(pc),A1
MOVE.L A1,D1
LEA.L _DirName(A5),A6
MOVE.L A6,D2
CALLDOS VPrintf
bra unlockthis
1$: MOVE.L _DirName(A5),D1
CALL CreateDir
MOVE.L D0,DirLock
beq 2$
MOVE.L DirLock,D1
CALL UnLock
move.l _DirName(a5),d1
moveq #FIBF_EXECUTE,d2
CALL SetProtection
bra nolock
2$: MOVEQ.L #RETURN_ERROR,D0
CMP.L D0,RetCode
beq 3$
move.l d0,d7
CALL IOErr
MOVE.L D0,IOError
3$: LEA.L cantcreateerr(pc),A0
MOVE.L A0,D1
LEA.L _DirName(A5),A1
MOVE.L A1,D2
CALL VPrintf
unlockthis:
MOVE.L DirLock,D1
CALL UnLock
nolock: ADDQ.L #4,A2
MOVE.L (A2),_DirName(A5)
.l4: TST.L _DirName(A5)
bne .l5
.l3: MOVE.L 32(sp),D1
CALLDOS FreeArgs
MOVE.L IOError,D1
CALL SetIoErr
abort: TST.L IOError
beq closedos
MOVE.L IOError,D1
MOVEQ.L #0,D2
CALLDOS PrintFault
closedos:
MOVEA.L _DOSBase,A1
MOVEA.L _ExecBase(sp),A6
CALL CloseLibrary
bra quit
nodos: move.l _ExecBase(sp),A0
MOVEA.L (A0),A1
MOVEA.L ThisTask(A1),A0
MOVEQ.L #ERROR_INVALID_RESIDENT_LIBRARY,D0
MOVE.L D0,pr_Result2(A0)
quit: MOVE.L RetCode,D0
MOVEM.L (sp)+,D2-D3/D5-D7/A2-A3/A6
UNLK A5
RTS
DC.B "$VER: makedir 37.211 (7.7.93 by as)",$0a,$0d,0
dosname: DC.B "dos.library",0
pattern: DC.B "NAME/M",0
nonameerr: DC.B "No name given",$0a,0
twiceerr: DC.B "%s already exists",$0a,0
cantcreateerr: DC.B "Can't create directory %s",$0a,0
END